make linking succeed with the following side effects:
- removing pdf support (possibly due to webrtc being disabled in args.gn?)
but possibly adding ppapi will allow pdf to link too(?) so it's not required to remove pdf in fact.
- attempt to fix that Illegal instruction
- removed gcd_private - for mdns=false to link

diff --git a/build/common.gypi b/build/common.gypi
index c6b1d70..ac12972 100644
--- a/build/common.gypi
+++ b/build/common.gypi
@@ -1341,5 +1341,5 @@
 
     # And if we want to dump symbols for Breakpad-enabled builds.
-    'linux_dump_symbols%': 0,
+    'linux_dump_symbols%': 1,
     # And if we want to strip the binary after dumping symbols.
     'linux_strip_binary%': 0,
diff --git a/chrome/app/chrome_exe_main_aura.cc b/chrome/app/chrome_exe_main_aura.cc
index 6bb7e41..b922a41 100644
--- a/chrome/app/chrome_exe_main_aura.cc
+++ b/chrome/app/chrome_exe_main_aura.cc
@@ -14,5 +14,7 @@ int ChromeMain(int argc, const char** argv);
 }
 
-int main(int argc, const char** argv) {
+int 
+__attribute__ ((visibility ("default")))
+main(int argc, const char** argv) {
   return ChromeMain(argc, argv);
 }
diff --git a/chrome/app/chrome_main_delegate.cc b/chrome/app/chrome_main_delegate.cc
index 3b56ecf..eaa0f9d 100644
--- a/chrome/app/chrome_main_delegate.cc
+++ b/chrome/app/chrome_main_delegate.cc
@@ -119,5 +119,5 @@
 #if defined(ENABLE_PLUGINS) && (defined(CHROME_MULTIPLE_DLL_CHILD) || \
     !defined(CHROME_MULTIPLE_DLL_BROWSER))
-#include "pdf/pdf.h"
+//#include "pdf/pdf.h"
 #endif
 
@@ -800,8 +800,8 @@ void ChromeMainDelegate::SandboxInitialized(const std::string& process_type) {
 #endif
 #if defined(ENABLE_PLUGINS)
-  ChromeContentClient::SetPDFEntryFunctions(
+/*  ChromeContentClient::SetPDFEntryFunctions(
       chrome_pdf::PPP_GetInterface,
       chrome_pdf::PPP_InitializeModule,
-      chrome_pdf::PPP_ShutdownModule);
+      chrome_pdf::PPP_ShutdownModule);*/
 #endif
 #endif
diff --git a/chrome/browser/devtools/BUILD.gn b/chrome/browser/devtools/BUILD.gn
index a7580cb..765dbb4 100644
--- a/chrome/browser/devtools/BUILD.gn
+++ b/chrome/browser/devtools/BUILD.gn
@@ -74,5 +74,5 @@ static_library("devtools") {
       "//third_party/leveldatabase",
       "//third_party/libusb",
-      ":webrtc_device_provider_resources",
+#      ":webrtc_device_provider_resources",
     ]
     sources += [
@@ -103,12 +103,12 @@ static_library("devtools") {
       "device/usb/usb_device_provider.cc",
       "device/usb/usb_device_provider.h",
-      "device/webrtc/devtools_bridge_client.cc",
-      "device/webrtc/devtools_bridge_client.h",
-      "device/webrtc/devtools_bridge_instances_request.cc",
-      "device/webrtc/devtools_bridge_instances_request.h",
-      "device/webrtc/send_command_request.cc",
-      "device/webrtc/send_command_request.h",
-      "device/webrtc/webrtc_device_provider.cc",
-      "device/webrtc/webrtc_device_provider.h",
+#      "device/webrtc/devtools_bridge_client.cc",
+#      "device/webrtc/devtools_bridge_client.h",
+#      "device/webrtc/devtools_bridge_instances_request.cc",
+#      "device/webrtc/devtools_bridge_instances_request.h",
+#      "device/webrtc/send_command_request.cc",
+#      "device/webrtc/send_command_request.h",
+#      "device/webrtc/webrtc_device_provider.cc",
+#      "device/webrtc/webrtc_device_provider.h",
       "devtools_contents_resizing_strategy.cc",
       "devtools_contents_resizing_strategy.h",
@@ -135,15 +135,15 @@ static_library("devtools") {
 }
 
-if (!is_android) {
-  # GYP version: chrome/browser/devtools/webrtc_device_provider_resources.gyp:webrtc_device_provider_resources
-  grit("webrtc_device_provider_resources") {
-    source = "device/webrtc/resources.grd"
-    output_dir = "$root_gen_dir/chrome"
-    outputs = [
-      "grit/webrtc_device_provider_resources.h",
-      "grit/webrtc_device_provider_resources_map.cc",
-      "grit/webrtc_device_provider_resources_map.h",
-      "webrtc_device_provider_resources.pak",
-    ]
-  }
-}
+#if (!is_android) {
+#  # GYP version: chrome/browser/devtools/webrtc_device_provider_resources.gyp:webrtc_device_provider_resources
+#  grit("webrtc_device_provider_resources") {
+#    source = "device/webrtc/resources.grd"
+#    output_dir = "$root_gen_dir/chrome"
+#    outputs = [
+#      "grit/webrtc_device_provider_resources.h",
+#      "grit/webrtc_device_provider_resources_map.cc",
+#      "grit/webrtc_device_provider_resources_map.h",
+#      "webrtc_device_provider_resources.pak",
+#    ]
+#  }
+#}
diff --git a/chrome/browser/devtools/device/devtools_android_bridge.cc b/chrome/browser/devtools/device/devtools_android_bridge.cc
index 4f6762a..6151368 100644
--- a/chrome/browser/devtools/device/devtools_android_bridge.cc
+++ b/chrome/browser/devtools/device/devtools_android_bridge.cc
@@ -27,5 +27,5 @@
 #include "chrome/browser/devtools/device/self_device_provider.h"
 #include "chrome/browser/devtools/device/usb/usb_device_provider.h"
-#include "chrome/browser/devtools/device/webrtc/webrtc_device_provider.h"
+//#include "chrome/browser/devtools/device/webrtc/webrtc_device_provider.h"
 #include "chrome/browser/devtools/devtools_protocol.h"
 #include "chrome/browser/devtools/devtools_target_impl.h"
@@ -1032,6 +1032,6 @@ void DevToolsAndroidBridge::CreateDeviceProviders() {
 
   if (IsWebRTCDeviceProviderEnabled()) {
-    device_providers.push_back(
-        new WebRTCDeviceProvider(profile_, signin_manager_, token_service_));
+//    device_providers.push_back(
+//        new WebRTCDeviceProvider(profile_, signin_manager_, token_service_));
   }
 
diff --git a/chrome/browser/extensions/browser_context_keyed_service_factories.cc b/chrome/browser/extensions/browser_context_keyed_service_factories.cc
index 5830c48..fa7249c 100644
--- a/chrome/browser/extensions/browser_context_keyed_service_factories.cc
+++ b/chrome/browser/extensions/browser_context_keyed_service_factories.cc
@@ -18,10 +18,10 @@
 #include "chrome/browser/extensions/api/feedback_private/feedback_private_api.h"
 #include "chrome/browser/extensions/api/font_settings/font_settings_api.h"
-#include "chrome/browser/extensions/api/gcd_private/gcd_private_api.h"
+//#include "chrome/browser/extensions/api/gcd_private/gcd_private_api.h"
 #include "chrome/browser/extensions/api/history/history_api.h"
 #include "chrome/browser/extensions/api/hotword_private/hotword_private_api.h"
 #include "chrome/browser/extensions/api/identity/identity_api.h"
 #include "chrome/browser/extensions/api/location/location_manager.h"
-#include "chrome/browser/extensions/api/mdns/mdns_api.h"
+//#include "chrome/browser/extensions/api/mdns/mdns_api.h"
 #include "chrome/browser/extensions/api/omnibox/omnibox_api.h"
 #include "chrome/browser/extensions/api/preference/chrome_direct_setting_api.h"
@@ -100,5 +100,5 @@ void EnsureBrowserContextKeyedServiceFactoriesBuilt() {
   extensions::FeedbackPrivateAPI::GetFactoryInstance();
   extensions::FontSettingsAPI::GetFactoryInstance();
-  extensions::GcdPrivateAPI::GetFactoryInstance();
+//  extensions::GcdPrivateAPI::GetFactoryInstance();
   extensions::HistoryAPI::GetFactoryInstance();
   extensions::HotwordPrivateEventService::GetFactoryInstance();
@@ -113,5 +113,5 @@ void EnsureBrowserContextKeyedServiceFactoriesBuilt() {
   extensions::LogPrivateAPI::GetFactoryInstance();
 #endif
-  extensions::MDnsAPI::GetFactoryInstance();
+//  extensions::MDnsAPI::GetFactoryInstance();
 #if defined(OS_CHROMEOS)
   extensions::MediaPlayerAPI::GetFactoryInstance();
diff --git a/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc b/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc
index 18ea11e..b339eb2 100644
--- a/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc
+++ b/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc
@@ -104,5 +104,5 @@
 #include "chrome/browser/ui/webui/net_export_ui.h"
 #else
-#include "chrome/browser/devtools/device/webrtc/webrtc_device_provider.h"
+//#include "chrome/browser/devtools/device/webrtc/webrtc_device_provider.h"
 #include "chrome/browser/ui/webui/devtools_ui.h"
 #include "chrome/browser/ui/webui/inspect_ui.h"
@@ -468,6 +468,6 @@ WebUIFactoryFunction GetWebUIFactoryFunction(WebUI* web_ui,
   if (url.SchemeIs(content::kChromeDevToolsScheme))
     return &NewWebUI<DevToolsUI>;
-  if (url.host() == chrome::kChromeUIWebRTCDeviceProviderHost)
-    return &NewWebUI<WebRTCDeviceProvider::WebUI>;
+//  if (url.host() == chrome::kChromeUIWebRTCDeviceProviderHost)
+//    return &NewWebUI<WebRTCDeviceProvider::WebUI>;
 
   // chrome://inspect isn't supported on Android nor iOS. Page debugging is
diff --git a/chrome/browser/ui/webui/options/options_ui.cc b/chrome/browser/ui/webui/options/options_ui.cc
index 0de3974..2e5a305 100644
--- a/chrome/browser/ui/webui/options/options_ui.cc
+++ b/chrome/browser/ui/webui/options/options_ui.cc
@@ -271,5 +271,5 @@ OptionsUI::OptionsUI(content::WebUI* web_ui)
   AddOptionsPageUIHandler(localized_strings, core_handler);
 
-  AddOptionsPageUIHandler(localized_strings, new AutofillOptionsHandler());
+//  AddOptionsPageUIHandler(localized_strings, new AutofillOptionsHandler());
   AddOptionsPageUIHandler(localized_strings,
                           new AutomaticSettingsResetHandler());
diff --git a/chrome/BUILD.gn b/chrome/BUILD.gn
index b8cd7a1..192711c 100644
--- a/chrome/BUILD.gn
+++ b/chrome/BUILD.gn
@@ -139,7 +139,7 @@ if (!is_android) {
     }
 
-    if (is_linux && enable_plugins) {
-      deps += [ "//pdf" ]
-    }
+#    if (is_linux && enable_plugins) {
+#      deps += [ "//pdf" ]
+#    }
   }
 }  # !is_android
@@ -224,7 +224,7 @@ shared_library("main_dll") {
   }
 
-  if (enable_plugins) {
-    deps += [ "//pdf" ]
-  }
+#  if (enable_plugins) {
+#    deps += [ "//pdf" ]
+#  }
 }
 
@@ -470,8 +470,8 @@ repack("packed_extra_resources") {
       "$root_gen_dir/chrome/settings_resources.pak",
       "$root_gen_dir/chrome/sync_file_system_internals_resources.pak",
-      "$root_gen_dir/chrome/webrtc_device_provider_resources.pak",
+#      "$root_gen_dir/chrome/webrtc_device_provider_resources.pak",
     ]
     deps += [
-      "//chrome/browser/devtools:webrtc_device_provider_resources",
+#      "//chrome/browser/devtools:webrtc_device_provider_resources",
       "//chrome/browser/resources:component_extension_resources",
       "//chrome/browser/resources:options_resources",
diff --git a/chrome/chrome_browser_extensions.gypi b/chrome/chrome_browser_extensions.gypi
index 6148e6c..4b6e74b 100644
--- a/chrome/chrome_browser_extensions.gypi
+++ b/chrome/chrome_browser_extensions.gypi
@@ -248,6 +248,6 @@
       'browser/extensions/api/font_settings/font_settings_api.cc',
       'browser/extensions/api/font_settings/font_settings_api.h',
-      'browser/extensions/api/gcd_private/gcd_private_api.cc',
-      'browser/extensions/api/gcd_private/gcd_private_api.h',
+#      'browser/extensions/api/gcd_private/gcd_private_api.cc',
+#      'browser/extensions/api/gcd_private/gcd_private_api.h',
       'browser/extensions/api/gcm/gcm_api.cc',
       'browser/extensions/api/gcm/gcm_api.h',
@@ -306,12 +306,12 @@
       'browser/extensions/api/management/chrome_management_api_delegate.cc',
       'browser/extensions/api/management/chrome_management_api_delegate.h',
-      'browser/extensions/api/mdns/dns_sd_delegate.cc',
-      'browser/extensions/api/mdns/dns_sd_delegate.h',
-      'browser/extensions/api/mdns/dns_sd_device_lister.cc',
-      'browser/extensions/api/mdns/dns_sd_device_lister.h',
-      'browser/extensions/api/mdns/dns_sd_registry.cc',
-      'browser/extensions/api/mdns/dns_sd_registry.h',
-      'browser/extensions/api/mdns/mdns_api.cc',
-      'browser/extensions/api/mdns/mdns_api.h',
+#      'browser/extensions/api/mdns/dns_sd_delegate.cc',
+#      'browser/extensions/api/mdns/dns_sd_delegate.h',
+#      'browser/extensions/api/mdns/dns_sd_device_lister.cc',
+#      'browser/extensions/api/mdns/dns_sd_device_lister.h',
+#      'browser/extensions/api/mdns/dns_sd_registry.cc',
+#      'browser/extensions/api/mdns/dns_sd_registry.h',
+#      'browser/extensions/api/mdns/mdns_api.cc',
+#      'browser/extensions/api/mdns/mdns_api.h',
       'browser/extensions/api/media_galleries/media_galleries_api.cc',
       'browser/extensions/api/media_galleries/media_galleries_api.h',
diff --git a/chrome/chrome_debugger.gypi b/chrome/chrome_debugger.gypi
index 09b182a..7fc110c 100644
--- a/chrome/chrome_debugger.gypi
+++ b/chrome/chrome_debugger.gypi
@@ -14,5 +14,5 @@
         '../content/content.gyp:content_browser',
         '../net/net.gyp:net',
-        'browser/devtools/webrtc_device_provider_resources.gyp:webrtc_device_provider_resources',
+#        'browser/devtools/webrtc_device_provider_resources.gyp:webrtc_device_provider_resources',
         'browser/devtools/devtools_protocol_constants.gyp:devtools_protocol_constants',
       ],
@@ -83,12 +83,12 @@
             'browser/devtools/device/usb/usb_device_provider.cc',
             'browser/devtools/device/usb/usb_device_provider.h',
-            'browser/devtools/device/webrtc/devtools_bridge_client.cc',
-            'browser/devtools/device/webrtc/devtools_bridge_client.h',
-            'browser/devtools/device/webrtc/devtools_bridge_instances_request.cc',
-            'browser/devtools/device/webrtc/devtools_bridge_instances_request.h',
-            'browser/devtools/device/webrtc/send_command_request.cc',
-            'browser/devtools/device/webrtc/send_command_request.h',
-            'browser/devtools/device/webrtc/webrtc_device_provider.cc',
-            'browser/devtools/device/webrtc/webrtc_device_provider.h',
+#            'browser/devtools/device/webrtc/devtools_bridge_client.cc',
+#            'browser/devtools/device/webrtc/devtools_bridge_client.h',
+#            'browser/devtools/device/webrtc/devtools_bridge_instances_request.cc',
+#            'browser/devtools/device/webrtc/devtools_bridge_instances_request.h',
+#            'browser/devtools/device/webrtc/send_command_request.cc',
+#            'browser/devtools/device/webrtc/send_command_request.h',
+#            'browser/devtools/device/webrtc/webrtc_device_provider.cc',
+#            'browser/devtools/device/webrtc/webrtc_device_provider.h',
             'browser/devtools/devtools_contents_resizing_strategy.cc',
             'browser/devtools/devtools_contents_resizing_strategy.h',
diff --git a/chrome/chrome_resources.gyp b/chrome/chrome_resources.gyp
index 49018c5..5716d5b 100644
--- a/chrome/chrome_resources.gyp
+++ b/chrome/chrome_resources.gyp
@@ -82,5 +82,5 @@
             '../content/browser/devtools/devtools_resources.gyp:devtools_resources',
             '../content/browser/tracing/tracing_resources.gyp:tracing_resources',
-            'browser/devtools/webrtc_device_provider_resources.gyp:webrtc_device_provider_resources',
+#            'browser/devtools/webrtc_device_provider_resources.gyp:webrtc_device_provider_resources',
           ],
           'actions': [
diff --git a/chrome/common/extensions/api/schemas.gypi b/chrome/common/extensions/api/schemas.gypi
index e848f60..587fcac 100644
--- a/chrome/common/extensions/api/schemas.gypi
+++ b/chrome/common/extensions/api/schemas.gypi
@@ -44,5 +44,5 @@
       'file_system.idl',
       'font_settings.json',
-      'gcd_private.idl',
+#      'gcd_private.idl',
       'gcm.json',
       'hangouts_private.idl',
diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn
index 20d55d1..d0f6133 100644
--- a/chrome/test/BUILD.gn
+++ b/chrome/test/BUILD.gn
@@ -169,11 +169,11 @@ source_set("test_support") {
   }
 
-  if (enable_plugins) {
-    sources += [
-      "ppapi/ppapi_test.cc",
-      "ppapi/ppapi_test.h",
-    ]
-    deps += [ "//pdf" ]
-  }
+#  if (enable_plugins) {
+#    sources += [
+#      "ppapi/ppapi_test.cc",
+#      "ppapi/ppapi_test.h",
+#    ]
+#    deps += [ "//pdf" ]
+#  }
 
   if (use_ash) {
@@ -1679,7 +1679,7 @@ if (!is_android) {
       deps += [ "//ui/app_list:test_support" ]
     }
-    if (!enable_plugin_installation) {
-      sources -= [ "../browser/plugins/plugin_installer_unittest.cc" ]
-    }
+#    if (!enable_plugin_installation) {
+#      sources -= [ "../browser/plugins/plugin_installer_unittest.cc" ]
+#    }
   }
 
diff --git a/chrome/utility/printing_handler.cc b/chrome/utility/printing_handler.cc
index 9e282ad..6f1f023 100644
--- a/chrome/utility/printing_handler.cc
+++ b/chrome/utility/printing_handler.cc
@@ -14,5 +14,5 @@
 #include "chrome/utility/cloud_print/pwg_encoder.h"
 #include "content/public/utility/utility_thread.h"
-#include "pdf/pdf.h"
+//#include "pdf/pdf.h"
 #include "printing/page_range.h"
 #include "printing/pdf_render_settings.h"
@@ -197,8 +197,8 @@ bool PrintingHandler::RenderPDFPagesToPWGRaster(
 
   int total_page_count = 0;
-  if (!chrome_pdf::GetPDFDocInfo(data.data(), data_size,
-                                 &total_page_count, NULL)) {
+//  if (!chrome_pdf::GetPDFDocInfo(data.data(), data_size,
+//                                 &total_page_count, NULL)) {
     return false;
-  }
+//  }
 
   cloud_print::PwgEncoder encoder;
@@ -219,5 +219,5 @@ bool PrintingHandler::RenderPDFPagesToPWGRaster(
     }
 
-    if (!chrome_pdf::RenderPDFPageToBitmap(data.data(),
+/*    if (!chrome_pdf::RenderPDFPageToBitmap(data.data(),
                                            data_size,
                                            page_number,
@@ -226,7 +226,7 @@ bool PrintingHandler::RenderPDFPagesToPWGRaster(
                                            image.size().height(),
                                            settings.dpi(),
-                                           autoupdate)) {
+                                           autoupdate)) {*/
       return false;
-    }
+//    }
 
     cloud_print::PwgHeaderInfo header_info;
diff --git a/include/core/SkColorPriv.h b/include/core/SkColorPriv.h
index 9db7687..fe2664d 100644
--- a/third_party/skia/include/core/SkColorPriv.h
+++ b/third_party/skia/include/core/SkColorPriv.h
@@ -16,4 +16,5 @@
 #include "SkColor.h"
 #include "SkMath.h"
+#include "stdio.h"
 
 //////////////////////////////////////////////////////////////////////////////
@@ -101,5 +102,5 @@
 // pair of them are in the same 2 slots in both RGBA and BGRA, thus there is
 // no need to pass in the colortype to this function.
-static inline uint32_t SkSwizzle_RB(uint32_t c) {
+static  uint32_t SkSwizzle_RB(uint32_t c) {
     static const uint32_t kRBMask = (0xFF << SK_R32_SHIFT) | (0xFF << SK_B32_SHIFT);
 
@@ -109,5 +110,5 @@ static inline uint32_t SkSwizzle_RB(uint32_t c) {
 }
 
-static inline uint32_t SkPackARGB_as_RGBA(U8CPU a, U8CPU r, U8CPU g, U8CPU b) {
+static  uint32_t SkPackARGB_as_RGBA(U8CPU a, U8CPU r, U8CPU g, U8CPU b) {
     SkASSERT_IS_BYTE(a);
     SkASSERT_IS_BYTE(r);
@@ -118,5 +119,5 @@ static inline uint32_t SkPackARGB_as_RGBA(U8CPU a, U8CPU r, U8CPU g, U8CPU b) {
 }
 
-static inline uint32_t SkPackARGB_as_BGRA(U8CPU a, U8CPU r, U8CPU g, U8CPU b) {
+static  uint32_t SkPackARGB_as_BGRA(U8CPU a, U8CPU r, U8CPU g, U8CPU b) {
     SkASSERT_IS_BYTE(a);
     SkASSERT_IS_BYTE(r);
@@ -127,5 +128,5 @@ static inline uint32_t SkPackARGB_as_BGRA(U8CPU a, U8CPU r, U8CPU g, U8CPU b) {
 }
 
-static inline SkPMColor SkSwizzle_RGBA_to_PMColor(uint32_t c) {
+static  SkPMColor SkSwizzle_RGBA_to_PMColor(uint32_t c) {
 #ifdef SK_PMCOLOR_IS_RGBA
     return c;
@@ -135,5 +136,5 @@ static inline SkPMColor SkSwizzle_RGBA_to_PMColor(uint32_t c) {
 }
 
-static inline SkPMColor SkSwizzle_BGRA_to_PMColor(uint32_t c) {
+static  SkPMColor SkSwizzle_BGRA_to_PMColor(uint32_t c) {
 #ifdef SK_PMCOLOR_IS_BGRA
     return c;
@@ -162,5 +163,5 @@ static inline SkPMColor SkSwizzle_BGRA_to_PMColor(uint32_t c) {
     SK_LUM_COEFF_X. For correct results, r, g, and b should be in linear space.
 */
-static inline U8CPU SkComputeLuminance(U8CPU r, U8CPU g, U8CPU b) {
+static  U8CPU SkComputeLuminance(U8CPU r, U8CPU g, U8CPU b) {
     //The following is
     //r * SK_LUM_COEFF_R + g * SK_LUM_COEFF_G + b * SK_LUM_COEFF_B
@@ -175,5 +176,5 @@ static inline U8CPU SkComputeLuminance(U8CPU r, U8CPU g, U8CPU b) {
     In debugging, asserts that alpha is 0..255
 */
-static inline unsigned SkAlpha255To256(U8CPU alpha) {
+static  unsigned SkAlpha255To256(U8CPU alpha) {
     SkASSERT(SkToU8(alpha) == alpha);
     // this one assues that blending on top of an opaque dst keeps it that way
@@ -186,5 +187,5 @@ static inline unsigned SkAlpha255To256(U8CPU alpha) {
  *  This is slightly more accurate than SkAlpha255To256.
  */
-static inline unsigned Sk255To256(U8CPU value) {
+static  unsigned Sk255To256(U8CPU value) {
     SkASSERT(SkToU8(value) == value);
     return value + (value >> 7);
@@ -199,5 +200,5 @@ static inline unsigned Sk255To256(U8CPU value) {
 //  so we don't accidentally slip into unsigned math and lose the sign
 //  extension when we shift (in SkAlphaMul)
-static inline int SkAlphaBlend(int src, int dst, int scale256) {
+static  int SkAlphaBlend(int src, int dst, int scale256) {
     SkASSERT((unsigned)scale256 <= 256);
     return dst + SkAlphaMul(src - dst, scale256);
@@ -209,5 +210,5 @@ static inline int SkAlphaBlend(int src, int dst, int scale256) {
  *  This is more accurate than SkAlphaBlend, but slightly slower
  */
-static inline int SkAlphaBlend255(S16CPU src, S16CPU dst, U8CPU alpha) {
+static  int SkAlphaBlend255(S16CPU src, S16CPU dst, U8CPU alpha) {
     SkASSERT((int16_t)src == src);
     SkASSERT((int16_t)dst == dst);
@@ -239,5 +240,5 @@ static inline int SkAlphaBlend255(S16CPU src, S16CPU dst, U8CPU alpha) {
 #define SkB16Assert(b)  SkASSERT((unsigned)(b) <= SK_B16_MASK)
 
-static inline uint16_t SkPackRGB16(unsigned r, unsigned g, unsigned b) {
+static  uint16_t SkPackRGB16(unsigned r, unsigned g, unsigned b) {
     SkASSERT(r <= SK_R16_MASK);
     SkASSERT(g <= SK_G16_MASK);
@@ -254,5 +255,5 @@ static inline uint16_t SkPackRGB16(unsigned r, unsigned g, unsigned b) {
     by a value up to 32. Used in conjunction with SkCompact_rgb_16.
 */
-static inline uint32_t SkExpand_rgb_16(U16CPU c) {
+static  uint32_t SkExpand_rgb_16(U16CPU c) {
     SkASSERT(c == (uint16_t)c);
 
@@ -266,5 +267,5 @@ static inline uint32_t SkExpand_rgb_16(U16CPU c) {
     up to the caller to safely ignore them.
 */
-static inline U16CPU SkCompact_rgb_16(uint32_t c) {
+static  U16CPU SkCompact_rgb_16(uint32_t c) {
     return ((c >> 16) & SK_G16_MASK_IN_PLACE) | (c & ~SK_G16_MASK_IN_PLACE);
 }
@@ -275,5 +276,5 @@ static inline U16CPU SkCompact_rgb_16(uint32_t c) {
     "clean" the top 16bits.
 */
-static inline U16CPU SkAlphaMulRGB16(U16CPU c, unsigned scale) {
+static  U16CPU SkAlphaMulRGB16(U16CPU c, unsigned scale) {
     return SkCompact_rgb_16(SkExpand_rgb_16(c) * (scale >> 3) >> 5);
 }
@@ -287,5 +288,5 @@ static inline U16CPU SkAlphaMulRGB16(U16CPU c, unsigned scale) {
     "clean" the top 16bits.
 */
-static inline U16CPU SkBlendRGB16(U16CPU src, U16CPU dst, int srcScale) {
+static  U16CPU SkBlendRGB16(U16CPU src, U16CPU dst, int srcScale) {
     SkASSERT((unsigned)srcScale <= 256);
 
@@ -297,5 +298,5 @@ static inline U16CPU SkBlendRGB16(U16CPU src, U16CPU dst, int srcScale) {
 }
 
-static inline void SkBlendRGB16(const uint16_t src[], uint16_t dst[],
+static  void SkBlendRGB16(const uint16_t src[], uint16_t dst[],
                                 int srcScale, int count) {
     SkASSERT(count > 0);
@@ -313,5 +314,5 @@ static inline void SkBlendRGB16(const uint16_t src[], uint16_t dst[],
 
 #ifdef SK_DEBUG
-    static inline U16CPU SkRGB16Add(U16CPU a, U16CPU b) {
+    static  U16CPU SkRGB16Add(U16CPU a, U16CPU b) {
         SkASSERT(SkGetPackedR16(a) + SkGetPackedR16(b) <= SK_R16_MASK);
         SkASSERT(SkGetPackedG16(a) + SkGetPackedG16(b) <= SK_G16_MASK);
@@ -364,5 +365,5 @@ static inline void SkBlendRGB16(const uint16_t src[], uint16_t dst[],
  *  the components are 0..255, and are already premultiplied (i.e. alpha >= color)
  */
-static inline SkPMColor SkPackARGB32(U8CPU a, U8CPU r, U8CPU g, U8CPU b) {
+static  SkPMColor SkPackARGB32(U8CPU a, U8CPU r, U8CPU g, U8CPU b) {
     SkA32Assert(a);
     SkASSERT(r <= a);
@@ -374,10 +375,10 @@ static inline SkPMColor SkPackARGB32(U8CPU a, U8CPU r, U8CPU g, U8CPU b) {
 }
 
-static inline uint32_t SkPackPMColor_as_RGBA(SkPMColor c) {
+static  uint32_t SkPackPMColor_as_RGBA(SkPMColor c) {
     return SkPackARGB_as_RGBA(SkGetPackedA32(c), SkGetPackedR32(c),
                               SkGetPackedG32(c), SkGetPackedB32(c));
 }
 
-static inline uint32_t SkPackPMColor_as_BGRA(SkPMColor c) {
+static  uint32_t SkPackPMColor_as_BGRA(SkPMColor c) {
     return SkPackARGB_as_BGRA(SkGetPackedA32(c), SkGetPackedR32(c),
                               SkGetPackedG32(c), SkGetPackedB32(c));
@@ -391,5 +392,5 @@ static inline uint32_t SkPackPMColor_as_BGRA(SkPMColor c) {
  *   srcWeight is [0..256], unlike SkFourByteInterp which takes [0..255]
  */
-static inline SkPMColor SkFourByteInterp256(SkPMColor src, SkPMColor dst,
+static  SkPMColor SkFourByteInterp256(SkPMColor src, SkPMColor dst,
                                          unsigned scale) {
     unsigned a = SkAlphaBlend(SkGetPackedA32(src), SkGetPackedA32(dst), scale);
@@ -407,5 +408,5 @@ static inline SkPMColor SkFourByteInterp256(SkPMColor src, SkPMColor dst,
  *   (src, dst, 0xFF) returns src
  */
-static inline SkPMColor SkFourByteInterp(SkPMColor src, SkPMColor dst,
+static  SkPMColor SkFourByteInterp(SkPMColor src, SkPMColor dst,
                                          U8CPU srcWeight) {
     unsigned scale = SkAlpha255To256(srcWeight);
@@ -416,5 +417,5 @@ static inline SkPMColor SkFourByteInterp(SkPMColor src, SkPMColor dst,
  * 0xAARRGGBB -> 0x00AA00GG, 0x00RR00BB
  */
-static inline void SkSplay(uint32_t color, uint32_t* ag, uint32_t* rb) {
+static  void SkSplay(uint32_t color, uint32_t* ag, uint32_t* rb) {
     const uint32_t mask = 0x00FF00FF;
     *ag = (color >> 8) & mask;
@@ -426,5 +427,5 @@ static inline void SkSplay(uint32_t color, uint32_t* ag, uint32_t* rb) {
  * (note, ARGB -> AGRB)
  */
-static inline uint64_t SkSplay(uint32_t color) {
+static  uint64_t SkSplay(uint32_t color) {
     const uint32_t mask = 0x00FF00FF;
     uint64_t agrb = (color >> 8) & mask;  // 0x0000000000AA00GG
@@ -437,5 +438,5 @@ static inline uint64_t SkSplay(uint32_t color) {
  * 0xAAxxGGxx, 0xRRxxBBxx-> 0xAARRGGBB
  */
-static inline uint32_t SkUnsplay(uint32_t ag, uint32_t rb) {
+static  uint32_t SkUnsplay(uint32_t ag, uint32_t rb) {
     const uint32_t mask = 0xFF00FF00;
     return (ag & mask) | ((rb & mask) >> 8);
@@ -446,5 +447,5 @@ static inline uint32_t SkUnsplay(uint32_t ag, uint32_t rb) {
  * (note, AGRB -> ARGB)
  */
-static inline uint32_t SkUnsplay(uint64_t agrb) {
+static  uint32_t SkUnsplay(uint64_t agrb) {
     const uint32_t mask = 0xFF00FF00;
     return SkPMColor(
@@ -453,5 +454,5 @@ static inline uint32_t SkUnsplay(uint64_t agrb) {
 }
 
-static inline SkPMColor SkFastFourByteInterp256_32(SkPMColor src, SkPMColor dst, unsigned scale) {
+static  SkPMColor SkFastFourByteInterp256_32(SkPMColor src, SkPMColor dst, unsigned scale) {
     SkASSERT(scale <= 256);
 
@@ -467,5 +468,5 @@ static inline SkPMColor SkFastFourByteInterp256_32(SkPMColor src, SkPMColor dst,
 }
 
-static inline SkPMColor SkFastFourByteInterp256_64(SkPMColor src, SkPMColor dst, unsigned scale) {
+static  SkPMColor SkFastFourByteInterp256_64(SkPMColor src, SkPMColor dst, unsigned scale) {
     SkASSERT(scale <= 256);
     // Four 8-bit blends in one 64-bit register, with space to make sure the math doesn't collide.
@@ -478,5 +479,5 @@ static inline SkPMColor SkFastFourByteInterp256_64(SkPMColor src, SkPMColor dst,
  * Same as SkFourByteInterp256, but faster.
  */
-static inline SkPMColor SkFastFourByteInterp256(SkPMColor src, SkPMColor dst, unsigned scale) {
+static  SkPMColor SkFastFourByteInterp256(SkPMColor src, SkPMColor dst, unsigned scale) {
     // On a 64-bit machine, _64 is about 10% faster than _32, but ~40% slower on a 32-bit machine.
     if (sizeof(void*) == 4) {
@@ -491,5 +492,5 @@ static inline SkPMColor SkFastFourByteInterp256(SkPMColor src, SkPMColor dst, un
  * srcWeight scaling to [0, 256].
  */
-static inline SkPMColor SkFastFourByteInterp(SkPMColor src,
+static  SkPMColor SkFastFourByteInterp(SkPMColor src,
                                              SkPMColor dst,
                                              U8CPU srcWeight) {
@@ -504,10 +505,10 @@ static inline SkPMColor SkFastFourByteInterp(SkPMColor src,
  *  values are premultiplied in the debug version.
  */
-static inline SkPMColor SkPackARGB32NoCheck(U8CPU a, U8CPU r, U8CPU g, U8CPU b) {
+static  SkPMColor SkPackARGB32NoCheck(U8CPU a, U8CPU r, U8CPU g, U8CPU b) {
     return (a << SK_A32_SHIFT) | (r << SK_R32_SHIFT) |
            (g << SK_G32_SHIFT) | (b << SK_B32_SHIFT);
 }
 
-static inline
+static 
 SkPMColor SkPremultiplyARGBInline(U8CPU a, U8CPU r, U8CPU g, U8CPU b) {
     SkA32Assert(a);
@@ -534,9 +535,9 @@ static SK_ALWAYS_INLINE uint32_t SkAlphaMulQ(uint32_t c, unsigned scale) {
 }
 
-static inline SkPMColor SkPMSrcOver(SkPMColor src, SkPMColor dst) {
+static  SkPMColor SkPMSrcOver(SkPMColor src, SkPMColor dst) {
     return src + SkAlphaMulQ(dst, SkAlpha255To256(255 - SkGetPackedA32(src)));
 }
 
-static inline SkPMColor SkBlendARGB32(SkPMColor src, SkPMColor dst, U8CPU aa) {
+static  SkPMColor SkBlendARGB32(SkPMColor src, SkPMColor dst, U8CPU aa) {
     SkASSERT((unsigned)aa <= 255);
 
@@ -555,13 +556,13 @@ static inline SkPMColor SkBlendARGB32(SkPMColor src, SkPMColor dst, U8CPU aa) {
 
 #ifdef SK_DEBUG
-    static inline unsigned SkR32ToR16(unsigned r) {
+    static  unsigned SkR32ToR16(unsigned r) {
         SkR32Assert(r);
         return SkR32ToR16_MACRO(r);
     }
-    static inline unsigned SkG32ToG16(unsigned g) {
+    static  unsigned SkG32ToG16(unsigned g) {
         SkG32Assert(g);
         return SkG32ToG16_MACRO(g);
     }
-    static inline unsigned SkB32ToB16(unsigned b) {
+    static  unsigned SkB32ToB16(unsigned b) {
         SkB32Assert(b);
         return SkB32ToB16_MACRO(b);
@@ -577,5 +578,5 @@ static inline SkPMColor SkBlendARGB32(SkPMColor src, SkPMColor dst, U8CPU aa) {
 #define SkPacked32ToB16(c)  (((unsigned)(c) >> (SK_B32_SHIFT + SK_B32_BITS - SK_B16_BITS)) & SK_B16_MASK)
 
-static inline U16CPU SkPixel32ToPixel16(SkPMColor c) {
+static  U16CPU SkPixel32ToPixel16(SkPMColor c) {
     unsigned r = ((c >> (SK_R32_SHIFT + (8 - SK_R16_BITS))) & SK_R16_MASK) << SK_R16_SHIFT;
     unsigned g = ((c >> (SK_G32_SHIFT + (8 - SK_G16_BITS))) & SK_G16_MASK) << SK_G16_SHIFT;
@@ -584,5 +585,5 @@ static inline U16CPU SkPixel32ToPixel16(SkPMColor c) {
 }
 
-static inline U16CPU SkPack888ToRGB16(U8CPU r, U8CPU g, U8CPU b) {
+static  U16CPU SkPack888ToRGB16(U8CPU r, U8CPU g, U8CPU b) {
     return  (SkR32ToR16(r) << SK_R16_SHIFT) |
             (SkG32ToG16(g) << SK_G16_SHIFT) |
@@ -597,5 +598,5 @@ static inline U16CPU SkPack888ToRGB16(U8CPU r, U8CPU g, U8CPU b) {
 #define SkShouldDitherXY(x, y)  (((x) ^ (y)) & 1)
 
-static inline uint16_t SkDitherPack888ToRGB16(U8CPU r, U8CPU g, U8CPU b) {
+static  uint16_t SkDitherPack888ToRGB16(U8CPU r, U8CPU g, U8CPU b) {
     r = ((r << 1) - ((r >> (8 - SK_R16_BITS) << (8 - SK_R16_BITS)) | (r >> SK_R16_BITS))) >> (8 - SK_R16_BITS);
     g = ((g << 1) - ((g >> (8 - SK_G16_BITS) << (8 - SK_G16_BITS)) | (g >> SK_G16_BITS))) >> (8 - SK_G16_BITS);
@@ -605,5 +606,5 @@ static inline uint16_t SkDitherPack888ToRGB16(U8CPU r, U8CPU g, U8CPU b) {
 }
 
-static inline uint16_t SkDitherPixel32ToPixel16(SkPMColor c) {
+static  uint16_t SkDitherPixel32ToPixel16(SkPMColor c) {
     return SkDitherPack888ToRGB16(SkGetPackedR32(c), SkGetPackedG32(c), SkGetPackedB32(c));
 }
@@ -616,5 +617,5 @@ static inline uint16_t SkDitherPixel32ToPixel16(SkPMColor c) {
     possible to overflow.
 */
-static inline uint32_t SkPMColorToExpanded16x5(SkPMColor c) {
+static  uint32_t SkPMColorToExpanded16x5(SkPMColor c) {
     unsigned sr = SkPacked32ToR16(c);
     unsigned sg = SkPacked32ToG16(c);
@@ -630,5 +631,5 @@ static inline uint32_t SkPMColorToExpanded16x5(SkPMColor c) {
     (with dirt in the high 16bits, so caller beware).
 */
-static inline U16CPU SkSrcOver32To16(SkPMColor src, uint16_t dst) {
+static  U16CPU SkSrcOver32To16(SkPMColor src, uint16_t dst) {
     unsigned sr = SkGetPackedR32(src);
     unsigned sg = SkGetPackedG32(src);
@@ -651,13 +652,13 @@ static inline U16CPU SkSrcOver32To16(SkPMColor src, uint16_t dst) {
 // Convert a 16bit pixel to a 32bit pixel
 
-static inline unsigned SkR16ToR32(unsigned r) {
+static  unsigned SkR16ToR32(unsigned r) {
     return (r << (8 - SK_R16_BITS)) | (r >> (2 * SK_R16_BITS - 8));
 }
 
-static inline unsigned SkG16ToG32(unsigned g) {
+static  unsigned SkG16ToG32(unsigned g) {
     return (g << (8 - SK_G16_BITS)) | (g >> (2 * SK_G16_BITS - 8));
 }
 
-static inline unsigned SkB16ToB32(unsigned b) {
+static  unsigned SkB16ToB32(unsigned b) {
     return (b << (8 - SK_B16_BITS)) | (b >> (2 * SK_B16_BITS - 8));
 }
@@ -667,5 +668,5 @@ static inline unsigned SkB16ToB32(unsigned b) {
 #define SkPacked16ToB32(c)      SkB16ToB32(SkGetPackedB16(c))
 
-static inline SkPMColor SkPixel16ToPixel32(U16CPU src) {
+static  SkPMColor SkPixel16ToPixel32(U16CPU src) {
     SkASSERT(src == SkToU16(src));
 
@@ -682,5 +683,5 @@ static inline SkPMColor SkPixel16ToPixel32(U16CPU src) {
 
 // similar to SkPixel16ToPixel32, but returns SkColor instead of SkPMColor
-static inline SkColor SkPixel16ToColor(U16CPU src) {
+static  SkColor SkPixel16ToColor(U16CPU src) {
     SkASSERT(src == SkToU16(src));
 
@@ -711,5 +712,5 @@ typedef uint16_t SkPMColor16;
 #define SkB32To4444(b)  ((unsigned)(b) >> 4)
 
-static inline U8CPU SkReplicateNibble(unsigned nib) {
+static  U8CPU SkReplicateNibble(unsigned nib) {
     SkASSERT(nib <= 0xF);
     return (nib << 4) | nib;
@@ -732,5 +733,5 @@ static inline U8CPU SkReplicateNibble(unsigned nib) {
 
 #ifdef SK_DEBUG
-static inline void SkPMColor16Assert(U16CPU c) {
+static  void SkPMColor16Assert(U16CPU c) {
     unsigned a = SkGetPackedA4444(c);
     unsigned r = SkGetPackedR4444(c);
@@ -747,5 +748,5 @@ static inline void SkPMColor16Assert(U16CPU c) {
 #endif
 
-static inline unsigned SkAlpha15To16(unsigned a) {
+static  unsigned SkAlpha15To16(unsigned a) {
     SkASSERT(a <= 0xF);
     return a + (a >> 3);
@@ -753,5 +754,5 @@ static inline unsigned SkAlpha15To16(unsigned a) {
 
 #ifdef SK_DEBUG
-    static inline int SkAlphaMul4(int value, int scale) {
+    static  int SkAlphaMul4(int value, int scale) {
         SkASSERT((unsigned)scale <= 0x10);
         return value * scale >> 4;
@@ -761,20 +762,20 @@ static inline unsigned SkAlpha15To16(unsigned a) {
 #endif
 
-static inline unsigned SkR4444ToR565(unsigned r) {
+static  unsigned SkR4444ToR565(unsigned r) {
     SkASSERT(r <= 0xF);
     return (r << (SK_R16_BITS - 4)) | (r >> (8 - SK_R16_BITS));
 }
 
-static inline unsigned SkG4444ToG565(unsigned g) {
+static  unsigned SkG4444ToG565(unsigned g) {
     SkASSERT(g <= 0xF);
     return (g << (SK_G16_BITS - 4)) | (g >> (8 - SK_G16_BITS));
 }
 
-static inline unsigned SkB4444ToB565(unsigned b) {
+static  unsigned SkB4444ToB565(unsigned b) {
     SkASSERT(b <= 0xF);
     return (b << (SK_B16_BITS - 4)) | (b >> (8 - SK_B16_BITS));
 }
 
-static inline SkPMColor16 SkPackARGB4444(unsigned a, unsigned r,
+static  SkPMColor16 SkPackARGB4444(unsigned a, unsigned r,
                                          unsigned g, unsigned b) {
     SkASSERT(a <= 0xF);
@@ -787,5 +788,5 @@ static inline SkPMColor16 SkPackARGB4444(unsigned a, unsigned r,
 }
 
-static inline SkPMColor16 SkAlphaMulQ4(SkPMColor16 c, int scale) {
+static  SkPMColor16 SkAlphaMulQ4(SkPMColor16 c, int scale) {
     SkASSERT(scale <= 16);
 
@@ -806,5 +807,5 @@ static inline SkPMColor16 SkAlphaMulQ4(SkPMColor16 c, int scale) {
     once by a value up to 16.
 */
-static inline uint32_t SkExpand_4444(U16CPU c) {
+static  uint32_t SkExpand_4444(U16CPU c) {
     SkASSERT(c == (uint16_t)c);
 
@@ -813,5 +814,5 @@ static inline uint32_t SkExpand_4444(U16CPU c) {
 }
 
-static inline uint16_t SkSrcOver4444To16(SkPMColor16 s, uint16_t d) {
+static  uint16_t SkSrcOver4444To16(SkPMColor16 s, uint16_t d) {
     unsigned sa = SkGetPackedA4444(s);
     unsigned sr = SkR4444ToR565(SkGetPackedR4444(s));
@@ -838,5 +839,5 @@ static inline uint16_t SkSrcOver4444To16(SkPMColor16 s, uint16_t d) {
 }
 
-static inline uint16_t SkBlend4444To16(SkPMColor16 src, uint16_t dst, int scale16) {
+static  uint16_t SkBlend4444To16(SkPMColor16 src, uint16_t dst, int scale16) {
     SkASSERT((unsigned)scale16 <= 16);
 
@@ -844,5 +845,5 @@ static inline uint16_t SkBlend4444To16(SkPMColor16 src, uint16_t dst, int scale1
 }
 
-static inline SkPMColor SkPixel4444ToPixel32(U16CPU c) {
+static  SkPMColor SkPixel4444ToPixel32(U16CPU c) {
     uint32_t d = (SkGetPackedA4444(c) << SK_A32_SHIFT) |
                  (SkGetPackedR4444(c) << SK_R32_SHIFT) |
@@ -852,5 +853,5 @@ static inline SkPMColor SkPixel4444ToPixel32(U16CPU c) {
 }
 
-static inline SkPMColor16 SkPixel32ToPixel4444(SkPMColor c) {
+static  SkPMColor16 SkPixel32ToPixel4444(SkPMColor c) {
     return  (((c >> (SK_A32_SHIFT + 4)) & 0xF) << SK_A4444_SHIFT) |
     (((c >> (SK_R32_SHIFT + 4)) & 0xF) << SK_R4444_SHIFT) |
@@ -860,5 +861,5 @@ static inline SkPMColor16 SkPixel32ToPixel4444(SkPMColor c) {
 
 // cheap 2x2 dither
-static inline SkPMColor16 SkDitherARGB32To4444(U8CPU a, U8CPU r,
+static  SkPMColor16 SkDitherARGB32To4444(U8CPU a, U8CPU r,
                                                U8CPU g, U8CPU b) {
     // to ensure that we stay a legal premultiplied color, we take the max()
@@ -876,5 +877,5 @@ static inline SkPMColor16 SkDitherARGB32To4444(U8CPU a, U8CPU r,
 }
 
-static inline SkPMColor16 SkDitherPixel32To4444(SkPMColor c) {
+static  SkPMColor16 SkDitherPixel32To4444(SkPMColor c) {
     return SkDitherARGB32To4444(SkGetPackedA32(c), SkGetPackedR32(c),
                                 SkGetPackedG32(c), SkGetPackedB32(c));
@@ -885,5 +886,5 @@ static inline SkPMColor16 SkDitherPixel32To4444(SkPMColor c) {
     expanded ARGB_4444, but keeps each component 8bits
 */
-static inline uint32_t SkExpand_8888(SkPMColor c) {
+static  uint32_t SkExpand_8888(SkPMColor c) {
     return  (((c >> SK_R32_SHIFT) & 0xFF) << 24) |
             (((c >> SK_G32_SHIFT) & 0xFF) <<  8) |
@@ -895,5 +896,5 @@ static inline uint32_t SkExpand_8888(SkPMColor c) {
     a SkPMColor.
 */
-static inline SkPMColor SkCompact_8888(uint32_t c) {
+static  SkPMColor SkCompact_8888(uint32_t c) {
     return  (((c >> 24) & 0xFF) << SK_R32_SHIFT) |
             (((c >>  8) & 0xFF) << SK_G32_SHIFT) |
@@ -906,5 +907,5 @@ static inline SkPMColor SkCompact_8888(uint32_t c) {
     4bits of the result (just like a newly expanded PMColor16).
 */
-static inline uint32_t SkExpand32_4444(SkPMColor c) {
+static  uint32_t SkExpand32_4444(SkPMColor c) {
     return  (((c >> (SK_R32_SHIFT + 4)) & 0xF) << 24) |
             (((c >> (SK_G32_SHIFT + 4)) & 0xF) <<  8) |
@@ -919,10 +920,10 @@ void sk_dither_memset16(uint16_t dst[], uint16_t value, uint16_t other, int n);
 ///////////////////////////////////////////////////////////////////////////////
 
-static inline int SkUpscale31To32(int value) {
+static  int SkUpscale31To32(int value) {
     SkASSERT((unsigned)value <= 31);
     return value + (value >> 4);
 }
 
-static inline int SkBlend32(int src, int dst, int scale) {
+static  int SkBlend32(int src, int dst, int scale) {
     SkASSERT((unsigned)src <= 0xFF);
     SkASSERT((unsigned)dst <= 0xFF);
@@ -931,5 +932,5 @@ static inline int SkBlend32(int src, int dst, int scale) {
 }
 
-static inline SkPMColor SkBlendLCD16(int srcA, int srcR, int srcG, int srcB,
+static SkPMColor SkBlendLCD16(int srcA, int srcR, int srcG, int srcB,
                                      SkPMColor dst, uint16_t mask) {
     if (mask == 0) {
@@ -937,4 +938,5 @@ static inline SkPMColor SkBlendLCD16(int srcA, int srcR, int srcG, int srcB,
     }
 
+    printf("a\n");
     /*  We want all of these in 5bits, hence the shifts in case one of them
      *  (green) is 6bits.
@@ -944,4 +946,5 @@ static inline SkPMColor SkBlendLCD16(int srcA, int srcR, int srcG, int srcB,
     int maskB = SkGetPackedB16(mask) >> (SK_B16_BITS - 5);
 
+    printf("b\n");
     // Now upscale them to 0..32, so we can use blend32
     maskR = SkUpscale31To32(maskR);
@@ -954,8 +957,10 @@ static inline SkPMColor SkBlendLCD16(int srcA, int srcR, int srcG, int srcB,
     maskB = maskB * srcA >> 8;
 
+    printf("c\n");
     int dstR = SkGetPackedR32(dst);
     int dstG = SkGetPackedG32(dst);
     int dstB = SkGetPackedB32(dst);
 
+    printf("d\n");
     // LCD blitting is only supported if the dst is known/required
     // to be opaque
@@ -966,5 +971,5 @@ static inline SkPMColor SkBlendLCD16(int srcA, int srcR, int srcG, int srcB,
 }
 
-static inline SkPMColor SkBlendLCD16Opaque(int srcR, int srcG, int srcB,
+static  SkPMColor SkBlendLCD16Opaque(int srcR, int srcG, int srcB,
                                            SkPMColor dst, uint16_t mask,
                                            SkPMColor opaqueDst) {
@@ -1001,5 +1006,5 @@ static inline SkPMColor SkBlendLCD16Opaque(int srcR, int srcG, int srcB,
 }
 
-static inline void SkBlitLCD16Row(SkPMColor dst[], const uint16_t mask[],
+static  void SkBlitLCD16Row(SkPMColor dst[], const uint16_t mask[],
                                   SkColor src, int width, SkPMColor) {
     int srcA = SkColorGetA(src);
@@ -1015,5 +1020,5 @@ static inline void SkBlitLCD16Row(SkPMColor dst[], const uint16_t mask[],
 }
 
-static inline void SkBlitLCD16OpaqueRow(SkPMColor dst[], const uint16_t mask[],
+static  void SkBlitLCD16OpaqueRow(SkPMColor dst[], const uint16_t mask[],
                                         SkColor src, int width,
                                         SkPMColor opaqueDst) {
diff --git a/src/opts/opts_check_x86.cpp b/src/opts/opts_check_x86.cpp
index 6b9758c..277181d 100644
--- a/third_party/skia/src/opts/opts_check_x86.cpp
+++ b/third_party/skia/src/opts/opts_check_x86.cpp
@@ -239,5 +239,5 @@ static const SkBlitRow::Proc32 platform_32_procs_SSE4[] = {
     NULL,                               // S32_Opaque,
     S32_Blend_BlitRow32_SSE2,           // S32_Blend,
-    S32A_Opaque_BlitRow32_SSE4,         // S32A_Opaque
+    S32A_Opaque_BlitRow32_SSE2,         // S32A_Opaque
     S32A_Blend_BlitRow32_SSE2,          // S32A_Blend,
 };
@@ -291,7 +291,7 @@ SkBlitMask::BlitLCD16RowProc SkBlitMask::PlatformBlitRowProcs16(bool isOpaque) {
     if (supports_simd(SK_CPU_SSE_LEVEL_SSE2)) {
         if (isOpaque) {
-            return SkBlitLCD16OpaqueRow_SSE2;
+            return SkBlitLCD16OpaqueRow;
         } else {
-            return SkBlitLCD16Row_SSE2;
+            return SkBlitLCD16Row;
         }
     } else {
diff --git a/src/opts/SkBlitRow_opts_SSE2.cpp b/src/opts/SkBlitRow_opts_SSE2.cpp
index e830c5f..4b4dbd5 100644
--- a/third_party/skia/src/opts/SkBlitRow_opts_SSE2.cpp
+++ b/third_party/skia/src/opts/SkBlitRow_opts_SSE2.cpp
@@ -200,4 +200,20 @@ void S32A_Blend_BlitRow32_SSE2(SkPMColor* SK_RESTRICT dst,
     }
 
+        if (count & 1) {
+            *dst = SkBlendARGB32(*(src++), *dst, alpha);
+            dst += 1;
+            count -= 1;
+        }
+
+        const SkPMColor* SK_RESTRICT srcEnd = src + count;
+        while (src != srcEnd) {
+            *dst = SkBlendARGB32(*(src++), *dst, alpha);
+            dst += 1;
+            *dst = SkBlendARGB32(*(src++), *dst, alpha);
+            dst += 1;
+        }
+
+
+/*
     if (count >= 4) {
         while (((size_t)dst & 0x0F) != 0) {
@@ -230,5 +246,5 @@ void S32A_Blend_BlitRow32_SSE2(SkPMColor* SK_RESTRICT dst,
         dst++;
         count--;
-    }
+    }*/
 }
 
@@ -242,4 +258,23 @@ void Color32_SSE2(SkPMColor dst[], const SkPMColor src[], int count,
     }
 
+    if (0 == color) {                                                                                     
+            if (src != dst) {
+                memcpy(dst, src, count * sizeof(SkPMColor));
+            }
+            return;
+        }
+        unsigned colorA = SkGetPackedA32(color);
+        if (255 == colorA) {
+            sk_memset32(dst, color, count);
+        } else {
+            unsigned scale = 256 - SkAlpha255To256(colorA);
+            do {
+                *dst = color + SkAlphaMulQ(*src, scale);
+                src += 1;
+                dst += 1;
+            } while (--count);
+        }
+
+/*
     if (0 == color) {
         if (src != dst) {
@@ -287,5 +322,5 @@ void Color32_SSE2(SkPMColor dst[], const SkPMColor src[], int count,
             count--;
         }
-    }
+    }*/
 }
 
